La librería estándar es una colección de funciones y clases ya hechas que nos permiten agilizar la creación de programas nuevos.
En programación una librería es, esencialmente, código fuente ya escrito y compilado que nos permite hacer programas que necesiten hacer cálculos típicos más rápidamente. En vez de tener que programar nosotros mismos el cálculo de la raíz cuadrada, por ejemplo, la librería estándar (en concreto la parte de matemáticas, cmath) incluye una función sqrt que devuelve la raíz cuadrada de un número real.
Esto agiliza enormemente la creación de programas nuevos. Si queremos abrir un fichero y llenarlo de texto desde un programa, utilizaremos la clase ofstream, por ejemplo. O si queremos manipular números complejos, utilizaremos la clase complex. Otro ejemplo más: si queremos tener una tablas de tamaño variable, podemos usar la clase vector.
Todas estas clases, pese a no formar parte del núcleo del lenguaje (no son tipos integrados como int, char o bool), vienen con todos los compiladores de C++, sin excepción. Esto es porque lo que debe contener la librería (qué clases y con qué métodos, etc.) está estandarizado. Por lo tanto, independientemente del compilador que utilices, debes tener acceso a estas clases.
Para utilizar la librería estándar, es necesario averiguar primero en qué fichero de cabecera está la clase que nos interesa. Por ejemplo, si queremos usar la clase ofstream, el fichero de cabecera es fstream. En un programa donde queramos usar la clase ofstream pondremos, al principio:
#include <fstream>
Si en un programa queremos usar números complejos, pondremos:
#include <complex>
Para averiguar qué ficheros de cabecera existen y qué clases hay en cada uno, puedes consultar la Referencia de C++.
De todas maneras, con poner solamente el include no es suficiente. Hace falta, además, poner después de todos los #includes:
using namespace std;
Esta línea, conjuntamente con el fichero de cabecera iostream la venimos poniendo desde el primer día, de hecho.
Pues bien, poner using namespace std; nos permite utilizar el "espacio de nombres" estándar, denominado std. El espacio de nombres std simplemente aísla todos los nombres de clases, funciones y objetos en un apartado para que no se confundan con los nombres en nuestro programa (por si queremos hacer nuestra propia clase string o tenemos una variable con nombre cout).
La mejor manera de ver para qué sirve using namespace std; es quitarlo. El programa "Hola mundo!" sin esa línia sería así:
#include <iostream> int main() { std::cout << "Hola, mundo!" << std::endl; }
Lo que ha cambiado aquí es que ahora aparece std:: como prefijo de todas las cosas que vienen de la librería estándar, en este caso cout y endl. Si quisiésemos declarar un string habría que hacer así:
#include <iostream> int main() { std::string mensaje = "Hola, mundo!"; std::cout << mensaje << std::endl; }
Aclaración: por el hecho de tener #include <iostream> el #include <string> no es necesario porque iostream hace la inclusión implícitamente.
La idea es, entonces, que para evitar tener que prefijar todos los objetos, clases y funciones de la librería estándar con std:: se puede poner arriba de todo (pero después de los #includes):
using namespace std;
y entonces, en todo el programa no hace falta usar el prefijo std:: (que es bastante más cómodo).
En preparación